//////////////////////////////////////////////////////////////////////////

#ifndef _CONTROL_H_
#define _CONTROL_H_

#include <string>

class Input;
class GUI_Theme;
class GUI_ImageSurface;
class GUI_TextSurface;
struct SDL_Surface;

class GUI_Control
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////

    enum InputResult {IR_NoChanges, IR_NeedRepaint, IR_GetFocus, IR_DoAction};

    virtual ~GUI_Control();

    virtual bool Render(SDL_Surface *_mainSurface);
    virtual void Resize();
    virtual const std::string& GetText();
    virtual void SetText(const std::string& _text);

    virtual void DropFocus();

    /** Key change handler */
    virtual InputResult OnKeyChanged(Input* _input) = 0;


    /** Mouse position change handler */
    virtual InputResult OnMousePositionChanged(Input* _input);

    float Top();
    float Left();

//////////////////////////////////////////////////////////////////////////

protected:

//////////////////////////////////////////////////////////////////////////

    char m_TextAllign;
    float m_VerticalMargin;
    float m_HorisontalMargin;

    float m_XPosition;
    float m_YPosition;
    bool m_HasFocus;
    bool m_HasHover;

    GUI_ImageSurface *m_Hover;
    GUI_TextSurface *m_Text;
    GUI_ImageSurface *m_Background;

//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
